package com.weiyuwqj.server.mapper;

import com.weiyuwqj.api.model.BusAssetInvest;
import com.weiyuwqj.api.model.vo.AssetInvestVo;
import com.weiyuwqj.api.util.converter.IntegerConverter;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@Repository
public interface BusAssetInvestMapper extends Mapper<BusAssetInvest> {

    /**
     * 根据itemId查询资产包投资列表
     *
     * @param itemId
     * @return
     */
    List<BusAssetInvest> getAssetInvestListByItemId(Integer itemId);

    /**
     * 修改投资状态
     *
     * @param oldStatus 旧状态
     * @param newStatus 新状态
     * @param id        投资id
     * @return
     */
    Integer updateAssetInvestStatus(@Param("oldStatus") Integer oldStatus,
                                    @Param("newStatus") Integer newStatus,
                                    @Param("id") Integer id);

    /**
     * 根据id修改待收金额
     *
     * @param operPrincipal
     * @param operInterest
     * @param id
     * @return
     */
    Integer updateAssetFullInvestCollect(@Param("operPrincipal") BigDecimal operPrincipal,
                                         @Param("operInterest") BigDecimal operInterest,
                                         @Param("id") Integer id);


    //根据包id和期数查询
    List<BusAssetInvest> listByPackageIdAndPeriod(@Param(value = "assetPackageId") Integer assetPackageId,
                                                  @Param(value = "period") Integer period);

    //更新投资状态
    Integer updateItemInvestStatus(@Param("oldStatus") int oldStatus, @Param("newStatus") int newStatus, @Param("investId") Integer investId);

    //更新投资中金额
    Integer updateItemRepayInvestCollet(@Param("operPrincipal") BigDecimal operPrincipal,
                                        @Param("operInterest") BigDecimal operInterest,
                                        @Param("id") Integer id);

    /**
     * 根据订单号修改投资状态
     *
     * @param newStatus
     * @param oldStatus
     * @param orderNo
     * @return
     */
    Integer modifyAssetInvestStatusByOrderNo(@Param("newStatus") Integer newStatus, @Param("oldStatus") Integer oldStatus, @Param("orderNo") String orderNo);

    /**
     * 根据订单号修改冻结流水号
     *
     * @param freezeOrderNo
     * @param orderNo
     * @return
     */
    Integer modifyAssetInvestFreezeOrderNo(@Param("freezeOrderNo") String freezeOrderNo, @Param("orderNo") String orderNo);

    /**
     * 根据itemId查询未债转的列表
     *
     * @param itemId
     * @return
     */
    List<BusAssetInvest> getNotDebtAssetInvestListByItemId(Integer itemId);

    /**
     * 根据包id和期数查询列表
     *
     * @param periods
     * @param assetPackageId
     * @return
     */
    List<BusAssetInvest> getAssetInvestListByPackagePlanIdAndPeriods(@Param("periods") Integer periods, @Param("assetPackageId") Integer assetPackageId);

    /**
     * 根据id修改债权状态
     *
     * @param newStatus
     * @param oldStatus
     * @param id
     * @return
     */
    Integer modifyAssetInvestDebtTransferStatusById(@Param("newStatus") Integer newStatus, @Param("oldStatus") Integer oldStatus, @Param("id") Integer id);

    /**
     * 获取包投资记录
     * @param map
     * @return
     */
    List<AssetInvestVo> getList(Map map);

	/**
	 * 根据包计划ID获取第一个
	 *
	 * @param packagePlanId 包ID
	 * @return 第一个购买债权的人
	 */
	BusAssetInvest getOldestAssetInvestByPackagePlanId(@Param("packagePlanId") Integer packagePlanId);

	/**
	 * 保存对象
	 *
	 * @param assetInvest
	 */
	int saveBean(BusAssetInvest assetInvest);

    /**
     * 根据项目id查询记录
     * @param itemId
     * @return
     */
    List<AssetInvestVo> getInvestListByItemId(Integer itemId);
}